package com.yociyy.admin.biz;

import cn.hutool.core.util.StrUtil;
import com.yociyy.admin.mapper.BaseMenuMapper;
import com.yociyy.admin.mapper.BaseRoleMenuMapper;
import com.yociyy.admin.model.entity.BaseMenu;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;

import java.util.Arrays;
import java.util.List;
import java.util.Set;
import java.util.stream.Collectors;

/**
 * 菜单信息 biz
 *
 * @author wanghaobin、Y.yang
 * @date 2019-12-22
 */
@Service
public class BaseMenuBiz {

	@Autowired
	private BaseMenuMapper menuMapper;

	@Autowired
	private BaseRoleMenuMapper roleMenuMapper;

	/**
	 * 条件查询全部菜单信息
	 *
	 * @param menu 条件查询
	 * @return 菜单信息列表
	 */
	public List<BaseMenu> selectMenuList(BaseMenu menu) {
		return menuMapper.selectMenuList(menu);
	}

	/**
	 * 新增菜单信息
	 * 
	 * @param menu 菜单信息
	 * @return 结果
	 */
	public int insertMenu(BaseMenu menu) {
		return menuMapper.insertSelective(menu);
	}

	/**
	 * 修改菜单信息
	 * 
	 * @param menu 菜单信息
	 * @return 结果
	 */
	public int updateMenu(BaseMenu menu) {
		return menuMapper.updateByPrimaryKeySelective(menu);
	}

	/**
	 * 删除菜单信息
	 * 
	 * @param id 菜单id
	 * @return 结果
	 */
	public int deleteById(Long id) {
		return menuMapper.deleteByPrimaryKey(id);
	}

	/**
	 * 查询全部菜单树(不包含按钮信息)
	 *
	 * @return 菜单列表
	 */
	public List<BaseMenu> getMenuTreeAll() {
		return menuMapper.selectMenuTreeAll();
	}

	/**
	 * 通过角色id查询菜单列表
	 *
	 * @param roleId 角色id
	 * @return 菜单信息列表
	 */
	public List<BaseMenu> getMenuIdsByRoleId(Long roleId) {
		return menuMapper.selectMenuIdsByRoleId(roleId);
	}

	/**
	 * 通过用户id查询目录、菜单信息
	 *
	 * @return 菜单列表
	 */
	public List<BaseMenu> getMenuByUserId() {
		return menuMapper.selectMenuByUserId(1L);
	}

	/**
	 * 检查菜单树是否关联角色
	 *
	 * @param menuId 菜单id
	 * @return 结果
	 */
	public boolean checkMenuExistRole(Long menuId) {
		return roleMenuMapper.checkMenuExistRole(menuId) > 0 ? true : false;
	}

	/**
	 * 检查菜单是否存在子节点
	 *
	 * @param menuId 菜单id
	 * @return 结果
	 */
	public boolean checkHasChildByMenuId(Long menuId) {
		return menuMapper.checkHasChildByMenuId(menuId) > 0 ? true : false;
	}

	/**
	 * 通过用户id查询权限
	 *
	 * @param userId 用户id
	 * @return 权限列表
	 */
	public Set<String> selectPermissionByUserId(Long userId) {

		List<String> permsList = menuMapper.selectMenuPermissionByUserId(userId);
		Set<String> permsSet = permsList.stream().flatMap(perm -> {
			if (StrUtil.isEmpty(perm)) {
				return null;
			}
			return Arrays.stream(perm.trim().split(","));
		}).collect(Collectors.toSet());
		return permsSet;
	}

}
